package santeclair.referentiel.optique.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import santeclair.lunar.framework.annotation.HashCodeEquals;
import santeclair.lunar.framework.annotation.ToString;
import santeclair.lunar.framework.util.EqualsUtils;
import santeclair.lunar.framework.util.HashCodeUtils;
import santeclair.lunar.framework.util.ToStringUtils;
import santeclair.referentiel.optique.config.Constant;
import santeclair.referentiel.optique.referentiel.enumeration.RubriqueGrilleEnum;
import santeclair.referentiel.optique.referentiel.enumeration.TypeFormuleEnum;
import santeclair.referentiel.optique.referentiel.enumeration.TypeGeometrieVerreEnum;
import santeclair.referentiel.optique.referentiel.enumeration.TypeMateriauVerreEnum;

@Entity
@Table(name = "tr_grille_tarifaire", catalog = Constant.SCHEMA_NAME)
// , uniqueConstraints = {@UniqueConstraint(
// columnNames = {"identifiant_fabricant_optique", "type_geometrie_grille_tarifaire", "type_formule_grille_tarifaire",
// "rubrique_grille_tarifaire", "type_verre_grille_tarifaire"})})
public class GrilleTarifaire implements Serializable {

    private static final long serialVersionUID = -2464452842709897722L;

    @Id
    @Column(name = "identifiant_grille_tarifaire", unique = true, nullable = false)
    @ToString
    @HashCodeEquals
    private Integer idGrilleTarifaire;

    @ManyToOne()
    @JoinColumn(name = "identifiant_fabricant_optique", referencedColumnName = "identifiant_fabricant_optique")
    @ToString
    @HashCodeEquals
    private FabricantOptique fabricantOptique;

    @Column(name = "formule_grille_tarifaire", length = 900, unique = true)
    @ToString
    @HashCodeEquals
    private String formuleTarifaire;

    @Column(name = "type_geometrie_grille_tarifaire", length = 11, unique = true)
    @ToString
    @HashCodeEquals
    @Enumerated(EnumType.STRING)
    private TypeGeometrieVerreEnum typeGeometrie;

    @Column(name = "type_formule_grille_tarifaire", length = 11, unique = true)
    @ToString
    @HashCodeEquals
    @Enumerated(EnumType.STRING)
    private TypeFormuleEnum typeFormule;

    @Column(name = "rubrique_grille_tarifaire", length = 11, unique = true)
    @ToString
    @HashCodeEquals
    @Enumerated(EnumType.STRING)
    private RubriqueGrilleEnum rubriqueGrille;

    @Column(name = "type_verre_grille_tarifaire", length = 11, unique = true)
    @ToString
    @HashCodeEquals
    @Enumerated(EnumType.STRING)
    private TypeMateriauVerreEnum typeVerre;

    public Integer getIdGrilleTarifaire() {
        return idGrilleTarifaire;
    }

    public void setIdGrilleTarifaire(Integer idGrilleTarifaire) {
        this.idGrilleTarifaire = idGrilleTarifaire;
    }

    public FabricantOptique getFabricantOptique() {
        return fabricantOptique;
    }

    public void setFabricantOptique(FabricantOptique fabricantOptique) {
        this.fabricantOptique = fabricantOptique;
    }

    public String getFormuleTarifaire() {
        return formuleTarifaire;
    }

    public void setFormuleTarifaire(String formuleTarifaire) {
        this.formuleTarifaire = formuleTarifaire;
    }

    public TypeGeometrieVerreEnum getTypeGeometrie() {
        return typeGeometrie;
    }

    public void setTypeGeometrie(TypeGeometrieVerreEnum typeGeometrie) {
        this.typeGeometrie = typeGeometrie;
    }

    public TypeFormuleEnum getTypeFormule() {
        return typeFormule;
    }

    public void setTypeFormule(TypeFormuleEnum typeFormule) {
        this.typeFormule = typeFormule;
    }

    public RubriqueGrilleEnum getRubriqueGrille() {
        return rubriqueGrille;
    }

    public void setRubriqueGrille(RubriqueGrilleEnum rubriqueGrille) {
        this.rubriqueGrille = rubriqueGrille;
    }

    public TypeMateriauVerreEnum getTypeVerre() {
        return typeVerre;
    }

    public void setTypeVerre(TypeMateriauVerreEnum typeVerre) {
        this.typeVerre = typeVerre;
    }

    @Override
    public String toString() {
        return ToStringUtils.toString(this);
    }

    @Override
    public int hashCode() {
        return HashCodeUtils.hashCode(this);
    }

    @Override
    public boolean equals(Object obj) {
        return EqualsUtils.isEqual(this, obj);
    }

}
